﻿using System;
using System.Data;
using System.Windows.Forms;

namespace CentroVentas.Funciones.Ventas
{
    public partial class FunVentasCrear : Form
    {


        private int _idUsuario;
        private DataSet ds = new DataSet();

        private int _idProdTemp = 0;
        private int _idPrecTemp = 0;

        public FunVentasCrear(int usuario)
        {
            InitializeComponent();
            _idUsuario = usuario;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            //if (String.IsNullOrWhiteSpace(txtRut.Text))
            //{
            //    errorProvider1.SetError(btnBuscar, "Ingrese Rut");
            //    txtRut.BackColor = Color.LightGray;
            //    txtRut.Focus();
            //}
            //else
            //{
            //    errorProvider1.SetError(btnBuscar, "");
            //}
        }

        private void FunVentasCrear_Load(object sender, EventArgs e)
        {
            //rbtBoleta.Checked = true;
            //txtRut.Enabled = false;
            //txtNom.Enabled = false;
            //txtProd.Enabled = true;
            //txtCant.Enabled = false;
            //txtSubtotal.Enabled = false;
            //txtDescuento.Enabled = false;
            //txtIva.Enabled = false;
            //txtTotal.Enabled = false;
            //btnAceptar.Enabled = false;
            //btnBuscar.Enabled = false;
            //btnCancelar.Enabled = true;

            crearGrilla(ds);
            StockMax.Text = "\\0";
        }

        private void rbtBoleta_CheckedChanged(object sender, EventArgs e)
        {
            //if (rbtBoleta.Checked == true)
            //{
            //    txtRut.Enabled = false;
            //    txtRut.Clear();
            //    txtNom.Enabled = false;
            //    txtNom.Clear();
            //}

        }

        private void rbtFactura_CheckedChanged(object sender, EventArgs e)
        {
            //if (rbtFactura.Checked == true)
            //{
            //    txtRut.Enabled = true;
            //    txtRut.Clear();
            //}
        }


        private void txtProd_KeyPress(object sender, KeyPressEventArgs e)
        {
             //if (e.KeyChar==13)
             //{
             //    txtCant.Enabled = true;
             //    txtCant.Focus();
             //    txtProd.Enabled = false;
             //}  
        }

        private void txtCant_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (txtCant.Text == "0")
            {
                txtCant.Value = 0;
                txtCant.Focus();
                CentroVentas.Clases.Utiles.Utilidades.mensaje(Clases.Utiles.TipoMensaje.ERROR, "La cantidad debe ser mayor a cero", 40);
            }
            else 
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsSeparator(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {                    
                    if (e.KeyChar == 13) 
                    { 
                        e.Handled = true;
                        //txtCant.Enabled = false;
                        txtCom.Enabled = true;
                        txtCom.Focus();
                    }                    
                }
            }
        }

        private void btnBuscaProd_Click(object sender, EventArgs e)
        {
            _idProdTemp = 0;
            _idPrecTemp = 0;
            CentroVentas.Funciones.Productos.FunProductosSeleccionar fun = new Productos.FunProductosSeleccionar();
            if (fun.ShowDialog() == DialogResult.OK)
            {
                _idProdTemp = fun.IdProducto;
                _idPrecTemp = fun.IdPrecio;
                Clases.Funciones.Producto prod = new Clases.Funciones.Producto(fun.IdProducto);
                txtProd.Text = prod.CodigoBarras;
                txtCant.Enabled = true;
                txtCant.Minimum = 1;
                txtCant.Maximum = prod.Stock;
                StockMax.Text = "\\" + prod.Stock.ToString();
                txtCant.Focus();
            }
        }        

        private void txtProd_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F11)
            {
                _idProdTemp = 0;
                _idPrecTemp = 0;
                CentroVentas.Funciones.Productos.FunProductosSeleccionar fun = new Productos.FunProductosSeleccionar();
                if (fun.ShowDialog() == DialogResult.OK)
                {
                    _idProdTemp = fun.IdProducto;
                    _idPrecTemp = fun.IdPrecio;
                    Clases.Funciones.Producto prod = new Clases.Funciones.Producto(fun.IdProducto);
                    txtProd.Text = prod.Descripcion;
                    // txtCant.Enabled = true;
                    txtCant.Minimum = 1;
                    txtCant.Maximum = prod.Stock;
                    StockMax.Text = "\\" + prod.Stock.ToString();
                    txtCant.Focus();
                    txtCant.Select(0, 1);
                }
            }
        }

        private void txtCant_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
            {
                foreach (DataRow drd in ds.Tables["Ventas"].Rows)
                {
                    if (drd["IdProducto"].ToString() == _idProdTemp.ToString())
                    {
                        MessageBox.Show("SON IGUALES");
                    }
                    else
                    {                        
                        DataRow dr = ds.Tables["Ventas"].NewRow();
                        dr["IdProducto"] = _idProdTemp;
                        dr["IdPrecio"] = _idPrecTemp;
                        Clases.Funciones.Producto prod = new Clases.Funciones.Producto(_idProdTemp);
                        dr["Codigo"] = prod.CodigoBarras;
                        dr["Descripcion"] = prod.Descripcion;
                        dr["Precio"] = Clases.Currency.formatearMoneda(prod.PrecioUltimaCompra);
                        dr["Cantidad"] = txtCant.Value.ToString();
                        dr["Total"] = Clases.Currency.formatearMoneda(Convert.ToDouble(Convert.ToInt32(prod.PrecioUltimaCompra) * txtCant.Value));
                        ds.Tables["ventas"].Rows.Add(dr);             
                    }                        
                }         
            }
            actualizarGrilla();
            txtProd.Focus();
            txtProd.Clear();
            txtCant.Value = 1;
            // txtCant.Enabled = false;
        }
        

        private void crearGrilla(DataSet ds)
        {
            ds.Tables.Add("Ventas");
            ds.Tables["Ventas"].Columns.Add("IdProducto");
            ds.Tables["Ventas"].Columns.Add("IdPrecio");
            ds.Tables["Ventas"].Columns.Add("Codigo");
            ds.Tables["Ventas"].Columns.Add("Descripcion");
            ds.Tables["Ventas"].Columns.Add("Precio");
            ds.Tables["Ventas"].Columns.Add("Cantidad");
            ds.Tables["Ventas"].Columns.Add("Total");

            actualizarGrilla();
        }

        private double _subtotal = 0;
        private double _iva = 0;
        private double _total = 0;

        private void actualizarGrilla()
        {
            dgv.DataSource = ds;
            dgv.DataMember = "Ventas";
            dgv.Columns["IdProducto"].Visible = false;
            dgv.Columns["IdPrecio"].Visible = false;

            _subtotal = 0;
            _iva = 0;
            _total = 0;

            foreach (DataRow dr in ds.Tables["Ventas"].Rows)
            {
                Clases.Funciones.Producto prod = new Clases.Funciones.Producto(Convert.ToInt32(dr["IdProducto"]));

                _subtotal += (prod.PrecioUltimaCompra * Convert.ToInt32(dr["Cantidad"]));
            }
            _iva = (_subtotal * 0.19);
            _total = (_subtotal * 1.19);

            txtSubtotal.Text = Clases.Currency.formatearMoneda(_subtotal);
            txtIva.Text = Clases.Currency.formatearMoneda(_iva);
            txtTotal.Text = Clases.Currency.formatearMoneda(_total);
        }

        private void txtCant_ValueChanged(object sender, EventArgs e)
        {

        }

        

        

    }
}
